package com.Shuang.Recursion3;

//啤酒问题案例，啤酒2元一瓶，4个盖子可以换一瓶，2个空瓶可以换一瓶，请问10元最后可以喝多少瓶
public class Demo {
    public static int lastBottleNumber;  //每轮剩余的瓶子数
    public static int lastCoverNumber;  //每轮剩余的盖子数
    public static int allBottleNumber;  //最后总的啤酒瓶数
    public static void main(String[] args) {
        buy(10);
        System.out.println("总瓶数：" + allBottleNumber);
        System.out.println("最后剩的空瓶数：" + lastBottleNumber);
        System.out.println("最后剩的盖子数：" + lastCoverNumber);
    }

    //拿钱买酒方法
    public static void buy(int money){
        //1 先拿钱买完了再说
        int buyNumber = money / 2;
        allBottleNumber += buyNumber;
        //可以把得到的盖子和瓶子 换算成钱接着买酒，但是每轮可能会有剩余用不上的瓶子和盖子 可以留到下一轮使用
        //定义全局变量用来记住每轮剩余的瓶子和盖子
        int bottleNumber = buyNumber + lastBottleNumber;  //本轮的瓶数
        int coverNumber = buyNumber + lastCoverNumber;  //本轮的盖子数

        int gainMoney = 0;

        //2 把瓶子换算成钱
        if (bottleNumber >= 2){
            gainMoney += (bottleNumber / 2) * 2;
        }
        lastBottleNumber = bottleNumber % 2;  //本轮剩余的瓶子

        //3 把盖子换算成钱
        if (coverNumber >= 4){
            gainMoney += (coverNumber / 4) * 2;
        }
        lastCoverNumber = coverNumber % 4;  //本轮剩余的盖子

        //4 用换算的钱接着买酒
        if (gainMoney >= 2){
            buy(gainMoney);
        }
    }
}
